import * as XLSX from 'xlsx';
let input = null;
/**
 * 创建可上传文件的 input 元素
 * @param {Object} options - 配置项
 * @param {Function} callback - 文件选择回调函数
 * @returns {HTMLInputElement}
 */
export function createFileInput(options = {}, callback) {
    return new Promise((resolve, reject) => {

        // 基础配置合并
        const config = {
            multiple: false,    // 是否支持多选
            accept: '*/*',      // 允许的文件类型
            maxSize: 1024 * 1024 * 100, // 100MB
            className: 'custom-file-input',
            ...options
        };
        
        // 创建 input 元素
        input = document.createElement('input');
        input.type = 'file';
        input.className = config.className;
        input.multiple = config.multiple;
        input.accept = config.accept;
        input.style.display = 'none'; // 隐藏 input 元素
        // 添加事件监听
        input.addEventListener('change', (event) => {
            const files = Array.from(event.target.files);
            console.log('files:',files,config.accept.replace(/\.|\*\/\*/g, ''));
            const validFiles = [];
            const extensions = config.accept
              .replace(/[.*]/g, '')
              .split(',')
              .map(ext => ext.trim())
              .join('|');
              const regex = new RegExp(`\.(${extensions})$`, 'i');
            // 文件验证流程
            for (const file of files) {
                console.log('file:',file);
                // 类型验证（参考网页3）
                if (!regex.test(file.name)) {
                    console.warn(`文件 ${file.name} 类型不符合要求`);
                    continue;
                }

                // 大小验证（参考网页1）
                if (file.size > config.maxSize) {
                    console.warn(`文件 ${file.name} 超过大小限制`);
                    continue;
                }

                validFiles.push(file);
            }

            resolve(validFiles);
            event.target.value = ''; // 允许重复选择相同文件
            input.remove(); // 移除 input 元素
        });
        document.body.appendChild(input);
        input.click(); // 自动触发文件选择对话框
       
    })
}

export function excelToData(headerMap) {
   
    return new Promise(async (resolve, reject) => {
        const files = await  createFileInput({
            accept: '.xlsx, .xls',
            maxSize: 2 * 1024 * 1024,
            className: 'image-upload-input'
        })
       const file = files[0];
        console.log('file:', file);
        if (!file) return;

        const reader = new FileReader();
        reader.onload = (e) => {
            console.log('e:', e);
            const data = new Uint8Array(e.target.result);
            const workbook = XLSX.read(data, { type: 'array' }); // 解析为工作簿[2,5](@ref)
            const firstSheetName = workbook.SheetNames[0];
            const worksheet = workbook.Sheets[firstSheetName];

            // 将工作表转为 JSON 数组（header: 1 表示第一行为表头）
            const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 });
            const excelHeaders = jsonData.shift(); // 提取表头
            const excelData = jsonData; // 剩余为数据行
            const formatData = [];
            excelData.forEach(item => {
                const obj = {};
                excelHeaders.forEach((header, index) => {
                    if(headerMap[header]) {

                        obj[headerMap[header]] = item[index];
                    }
                });
                formatData.push(obj);
            })
            console.log('formData:', formatData);
            resolve({ excelHeaders, excelData, formatData });

        };
        reader.readAsArrayBuffer(file);
    })

}